﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using Liang.Util.Task.Enums;

namespace Liang.Util.Task
{
	public class TimerStrategyConfig
	{
		/// <summary>
		/// 默认配置
		/// </summary>
		public string Default { get; set; }
		/// <summary>
		/// 配置项
		/// </summary>
		public TimerStrategy[] Config { get; set; }
	}

	/// <summary>
	/// 时间配置
	/// </summary>
	public class TimerStrategy
	{
		/// <summary>
		/// 配置引用名
		/// </summary>
		public string RefName { get; set; }

		/// <summary>
		/// 是否可重入
		/// </summary>
		public bool Reentrant { get; set; }

		/// <summary>
		/// 时间模式
		/// timeMode取值如下：TimerMode.Month、TimerMode.Week、TimerMode.Week、TimerMode.Day、TimerMode.Date、TimerMode.Year
		/// </summary>
		public TimerStrategyMode TimerMode { get; set; }

		/// <summary>
		/// 指定某个时间算法的第几天，第1天就为1
		/// TimerMode=TimerMode.Month			时， 该DaySeq表示每个月中的哪几天
		///	TimerMode=TimerMode.Week			时， 该DaySeq表示每个星期中的哪几个星期几（0-星期天，其它用1-6表示）
		///	TimerMode=TimerMode.Day				时， 该值不需要设置
		///	TimerMode=TimerMode.LastDayOfMonth	时， 该DaySeq表示每个月倒数第几天
		///	TimerMode=TimerMode.Year			时， 该DaySeq表示每年中的第几天
		/// </summary>
		public List<int> Days { get; set; }

		/// <summary>
		/// 当指定一年中哪些月
		/// </summary>
		public List<int> Months { get; set; }

		/// <summary>
		/// 一年中那几天执行
		///	TimerMode=TimerMode.Date			时， 该Dates有值
		/// </summary>
		public List<DateTime> Dates { get; set; }

		/// <summary>
		/// 循环处理时间间隔（单位毫秒）
		/// </summary>
		public TimeSpan Interval { get; set; }

		/// <summary>
		/// 启动延迟时间（单位毫秒）
		/// </summary>
		public TimeSpan Delay { get; set; }

		/// <summary>
		/// 每天的时间策略
		/// </summary>
		public TimerStrategyByDay StrategyByDay { get; set; }
	}
	/// <summary>
	/// 每天的时间策略
	/// </summary>
	public class TimerStrategyByDay
	{
		/// <summary>
		/// 开始时间
		/// </summary>
		public TimeSpan BeginTime { get; set; }
		/// <summary>
		/// 结束时间
		/// </summary>
		public TimeSpan EndTime { get; set; }
		/// <summary>
		/// 间隔时间
		/// </summary>
		public TimeSpan Interval { get; set; }
		/// <summary>
		/// 时间点
		/// </summary>
		public TimeSpan[] TimePoints { get; set; }
	}
}
